﻿/*
格式阵列一 
Time Limit:1000MS  Memory Limit:32768K

  
Description:
根据读入的阶，按样例打印格式阵列。

Input:
输入数据含有不超过50个正整数n（1≤n≤25）。 
Output:
输出以n为阶的格式阵列。每行开始先打印行号，行号为两个字符宽，右对齐，行号与元素之间空2格。每个元素占3个字符宽。右对齐，元素值起始位置为0，以后每向右前进一个，元素值便取前一元素加1除n的余数，每进到下一行，起始的元素值为上一元素加1除以n的余数，依此类推。每个格式阵列之间应有一空行，最前与最后不应有空行。样本输出中，□表示空格。 
Sample Input:
6 3
Sample Output:
□1□□□□0□□1□□2□□3□□4□□5
□2□□□□1□□2□□3□□4□□5□□0
□3□□□□2□□3□□4□□5□□0□□1
□4□□□□3□□4□□5□□0□□1□□2
□5□□□□4□□5□□0□□1□□2□□3
□6□□□□5□□0□□1□□2□□3□□4

□1□□□□0□□1□□2
□2□□□□1□□2□□0
□3□□□□2□□0□□1
*/

#include <stdio.h>
namespace ctb{
	void format(unsigned num)
	{
		for (unsigned i=0u; i<num; i++)
		{
			printf("%2u%5u", i+1u, i);
			for (unsigned j=1u; j<num; ++j)
				printf("%3u", (i+j)%num);
			printf("\n");
		}
		printf("\n");
	}
}
int main(int argc, char* argv[])
{
	unsigned num;
	while (EOF!=scanf("%u", &num))
		ctb::format(num);

	return  0;
}